package com.example.archive.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.archive.entity.SystemLog;
import com.example.archive.mapper.SystemLogMapper;
import com.example.archive.service.SystemLogService;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

/**
 * 系统日志服务实现类
 * 继承MyBatis Plus的ServiceImpl，实现SystemLogService接口
 * 提供系统日志相关的业务逻辑实现
 */
@Service
public class SystemLogServiceImpl extends ServiceImpl<SystemLogMapper, SystemLog> implements SystemLogService {
    
    /**
     * 分页查询日志（带用户名）
     * 调用Mapper的自定义查询方法，关联查询用户信息
     * 
     * @param current 当前页码
     * @param size 每页大小
     * @return 分页查询结果
     */
    @Override
    public Page<SystemLog> getLogsWithUsername(int current, int size) {
        Page<SystemLog> page = new Page<>(current, size);
        return baseMapper.selectLogsWithUsername(page);
    }
    
    /**
     * 分页查询日志（带查询条件）
     * 支持按操作类型和时间范围筛选
     * 根据不同的查询条件组合调用不同的Mapper方法
     * 
     * @param current 当前页码
     * @param size 每页大小
     * @param action 操作类型（可选）
     * @param startTime 开始时间（可选）
     * @param endTime 结束时间（可选）
     * @return 分页查询结果
     */
    @Override
    public Page<SystemLog> getLogsWithConditions(int current, int size, String action, String startTime, String endTime) {
        Page<SystemLog> page = new Page<>(current, size);
        
        // 判断查询条件组合，调用相应的Mapper方法
        boolean hasAction = action != null && !action.isEmpty();
        boolean hasTimeRange = startTime != null && !startTime.isEmpty() && endTime != null && !endTime.isEmpty();
        
        if (hasAction && hasTimeRange) {
            // 有操作类型和时间范围
            return baseMapper.selectLogsByActionAndTimeRange(page, action, startTime, endTime);
        } else if (hasAction) {
            // 只有操作类型
            return baseMapper.selectLogsByAction(page, action);
        } else if (hasTimeRange) {
            // 只有时间范围
            return baseMapper.selectLogsByTimeRange(page, startTime, endTime);
        } else {
            // 没有查询条件，使用普通查询
            return baseMapper.selectLogsWithUsername(page);
        }
    }
    
    /**
     * 记录系统日志
     * 创建系统日志记录并保存到数据库
     * 
     * @param userId 用户ID（可以为null，表示系统操作）
     * @param action 操作类型
     * @param details 操作详情
     */
    @Override
    public void recordLog(Integer userId, String action, String details) {
        SystemLog log = new SystemLog();
        log.setUserId(userId);
        log.setAction(action);
        log.setActionDetails(details);
        log.setTimestamp(LocalDateTime.now());
        save(log);
    }
} 